// 初始化时检查扩展上下文
if (!chrome.runtime || !chrome.runtime.id) {
    console.warn('点击记录器：扩展上下文无效，脚本将不会记录点击');
}

// 检查扩展上下文是否有效
function isExtensionContextValid() {
    try {
        return !!(chrome.runtime && chrome.runtime.id);
    } catch (error) {
        return false;
    }
}

// 监听扩展上下文失效（页面可见性变化时重新检查）
document.addEventListener('visibilitychange', function() {
    if (!document.hidden) {
        if (isExtensionContextValid()) {
            // 页面激活且扩展上下文有效时，尝试发送缓存的数据
            sendCachedClicks();
        } else {
            console.warn('页面激活时发现扩展上下文无效');
        }
    }
});

// 监听页面上的所有点击事件
document.addEventListener('click', function(event) {
    // 在处理点击前检查扩展上下文
    if (!isExtensionContextValid()) {
        console.warn('扩展上下文无效，跳过点击记录');
        return;
    }
    // 获取点击的元素信息
    const clickData = {
        url: window.location.href,
        element: getElementInfo(event.target),
        x: event.clientX,
        y: event.clientY,
        timestamp: new Date().toISOString()
    };

    // 发送点击数据到后台脚本
    sendClickDataSafely(clickData);
}, true);

// 本地缓存失败的点击数据
let failedClicksCache = [];

// 安全发送点击数据的函数
function sendClickDataSafely(clickData) {
    // 检查扩展上下文是否有效
    if (!chrome.runtime || !chrome.runtime.id) {
        console.warn('扩展上下文已失效，缓存点击数据');
        cacheFailedClick(clickData);
        return;
    }

    try {
        chrome.runtime.sendMessage({
            action: 'recordClick',
            data: clickData
        }, (response) => {
            // 检查扩展上下文是否在回调中失效
            if (chrome.runtime.lastError) {
                const error = chrome.runtime.lastError;
                if (error.message.includes('Extension context invalidated')) {
                    console.warn('扩展上下文在发送消息时失效，缓存点击数据');
                    cacheFailedClick(clickData);
                } else {
                    console.error('发送消息失败：', error);
                    cacheFailedClick(clickData);
                }
            } else if (response && response.success) {
                console.log('点击数据已成功记录');
                // 成功发送后，尝试发送缓存的数据
                sendCachedClicks();
            } else {
                console.warn('点击数据记录可能失败');
                cacheFailedClick(clickData);
            }
        });
    } catch (error) {
        if (error.message.includes('Extension context invalidated')) {
            console.warn('扩展上下文已失效，缓存点击数据');
        } else {
            console.error('发送点击数据时发生错误：', error);
        }
        cacheFailedClick(clickData);
    }
}

// 缓存失败的点击数据
function cacheFailedClick(clickData) {
    failedClicksCache.push(clickData);
    // 限制缓存大小，避免内存溢出
    if (failedClicksCache.length > 100) {
        failedClicksCache.shift();
    }
}

// 发送缓存的点击数据
function sendCachedClicks() {
    if (failedClicksCache.length === 0 || !isExtensionContextValid()) {
        return;
    }

    console.log(`尝试发送 ${failedClicksCache.length} 个缓存的点击数据`);
    const clicksToSend = [...failedClicksCache];
    failedClicksCache = [];

    clicksToSend.forEach((clickData, index) => {
        setTimeout(() => {
            sendClickDataSafely(clickData);
        }, index * 100); // 错开发送时间，避免并发问题
    });
}

// 获取元素信息
function getElementInfo(element) {
    const tagName = element.tagName.toLowerCase();
    // 安全处理 className，兼容 SVG 元素等特殊情况
    let className = '';
    try {
        if (element.className) {
            const classNameStr = typeof element.className === 'string' ?
                element.className :
                element.className.toString();
            className = classNameStr ? `.${classNameStr.split(' ').join('.')}` : '';
        }
    } catch (error) {
        console.warn('获取元素 className 时出错：', error);
        className = '';
    }

    const id = element.id ? `#${element.id}` : '';
    const text = element.textContent ? element.textContent.substring(0, 50) : '';

    return {
        tag: tagName,
        selector: `${tagName}${id}${className}`,
        text: text.trim(),
        href: element.href || ''
    };
}

// 添加视觉反馈（可选）
function addClickFeedback(x, y) {
    const feedback = document.createElement('div');
    feedback.style.cssText = `
    position: fixed;
    left: ${x}px;
    top: ${y}px;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: rgba(255, 0, 0, 0.3);
    border: 2px solid red;
    pointer-events: none;
    z-index: 10000;
    animation: click-ripple 0.6s ease-out forwards;
  `;

    // 添加动画样式
    if (!document.getElementById('click-feedback-style')) {
        const style = document.createElement('style');
        style.id = 'click-feedback-style';
        style.textContent = `
      @keyframes click-ripple {
        0% {
          transform: scale(0);
          opacity: 1;
        }
        100% {
          transform: scale(2);
          opacity: 0;
        }
      }
    `;
        document.head.appendChild(style);
    }

    document.body.appendChild(feedback);

    // 移除反馈元素
    setTimeout(() => {
        if (feedback.parentNode) {
            feedback.parentNode.removeChild(feedback);
        }
    }, 600);
}

// 可选：添加点击反馈
document.addEventListener('click', function(event) {
    // 取消注释下面的行来启用视觉反馈
    // addClickFeedback(event.clientX, event.clientY);
}, true);